// Copyright (c) 2025 Ilya Fedorov
// SPDX-License-Identifier: MIT
// https://github.com/iljyxa/SharedQueryDesignerHRM
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Модуль общего назначения.
// 
// Возвращаемое значение:
//  ОбщийМодуль - Модуль общего назначения
Функция МодульОбщегоНазначения() Экспорт
	// + УИ
	//Возврат ОбщегоНазначения;
	Возврат УИ_ОбщегоНазначения;
	// - УИ
КонецФункции

// Модуль общего назначения клиент сервер.
// 
// Возвращаемое значение:
//  ОбщийМодуль - Модуль общего назначения клиент сервер
Функция МодульОбщегоНазначенияКлиентСервер() Экспорт
	// + УИ
	//Возврат ОбщегоНазначенияКлиентСервер;
	Возврат УИ_ОбщегоНазначенияКлиентСервер;
	// - УИ
КонецФункции

// Описания представлений по конфигурации.
// 
// Возвращаемое значение:
//  Соответствие Из КлючИЗначение - Описания представлений:
//	 * Ключ - Строка - Имя представления
//	 * Значение - См. НовоеОписаниеПредставления
Функция ОписанияПредставленийПоКонфигурации() Экспорт

	ОписанияПредставлений = Новый Соответствие;

	ДобавитьОписанияПредставлений_Базовые(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_АттестацииСотрудников(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_КадровоеПланирование(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_КадровыйУчет(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_КадровыйРезервГосслужащих(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_Медицина(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_ОхранаТруда(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_ОстаткиОтпусков(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_ОтражениеЗарплатыВБухучете(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_ПодборПерсонала(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_УправлениеШтатнымРасписанием(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_УчетБюджетныхУчреждений(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_УчетНачисленнойЗарплаты(ОписанияПредставлений);
	ДобавитьОписанияПредставлений_УчетРабочегоВремени(ОписанияПредставлений);

	Возврат ОписанияПредставлений;

КонецФункции

// Формирует исполняемый текст запроса представлений для которых не требуется
// указывать выбираемые поля.
// 
// Параметры:
//  ИмяПредставления - Строка - Имя представления
//  ОбязательныеПараметры - Массив из Строка, Строка - Обязательные параметры для представления, без указания которых
//  												   текст запроса не может быть сформирован
// 
// Возвращаемое значение:
//  Строка - Исполняемый текст запроса представления
//
Функция СформироватьЗапросПредставления(ИмяПредставления, Знач ОбязательныеПараметры = "") Экспорт

	ТекстЗапроса =
	"ВЫБРАТЬ ФЕЙК
	|	""Псевдополе"" КАК Псевдополе
	|ПОМЕСТИТЬ Представления_ИмяПредставления
	|ИЗ
	|	ВТ КАК ВТ
	|&ОбязательныеПараметры";

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяПредставления", ИмяПредставления);

	Если ТипЗнч(ОбязательныеПараметры) = Тип("Строка") Тогда
		ОбязательныеПараметры = СтрРазделить(ОбязательныеПараметры, ",", Ложь);
	КонецЕсли;

	Если ОбязательныеПараметры.Количество() = 0 Тогда
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбязательныеПараметры", "");
	Иначе
		УсловияОтбора = СтрСоединить(ОбязательныеПараметры, " = &ПсевдоПараметр" + Символы.ПС + "И ")
						+ " = &ПсевдоПараметр";
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбязательныеПараметры", "ГДЕ" + Символы.ПС + УсловияОтбора);
	КонецЕсли;

	МодульЗарплатаКадрыОбщиеНаборыДанных = МодульОбщегоНазначения().ОбщийМодуль("ЗарплатаКадрыОбщиеНаборыДанных");
	МодульЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц(ТекстЗапроса);

	Если СтрНайти(ТекстЗапроса, "ФЕЙК") > 0 Тогда 
		// Замена не произошла. Например, по функциональным опциям/подсистемам представление недоступно.
		ТекстЗапроса = "";
	КонецЕсли;

	Возврат ТекстЗапроса;

КонецФункции

// Разбирает описание доступных полей, предоставляемые типовой подсистемой и добавляет
// к описанию в формате этой обработки.
// Пример типового описания см. КадровыйУчет.ПоляПредставленийКадровыхДанныхСотрудников()
// 
// Параметры:
//  ПоляПредставлений - Массив Из Структура - Поля представлений. см. КадровыйУчет.ПоляПредставленийКадровыхДанныхСотрудников()
//  Описание - См. НовоеОписаниеПредставления
//  КонтрольУникальности - Булево - Признак контроля добавления полей, которые были ранее добавлены.
//  								Если Истина, то такие поля будут проигнорированы
Процедура ПоляПредставленийЗарплатаКадрыВДоступныеПоляПредставления(ПоляПредставлений,
																	Описание,
																	КонтрольУникальности = Ложь) Экспорт

	Для Каждого ОписаниеПоля Из ПоляПредставлений Цикл
		Если КонтрольУникальности И Описание.ДоступныеПоля.Найти(ОписаниеПоля.ИмяПоля, "Имя") <> Неопределено Тогда

			Продолжить;
		КонецЕсли;

		ДобавитьПолеПредставления(Описание,
								  ОписаниеПоля.ИмяПоля,
								  ОписаниеПоля.ПустоеЗначениеНаЯзыкеЗапросов,
								  ОписаниеПоля.ПутьПоляСКД);
	КонецЦикла;

КонецПроцедуры

// Разбирает текст запроса и добавляет в доступные поля описания.
// Разбирает первый с конца запроса выбора, если не указано иное ИмяВТ.
// Текст запроса должен быть валидным для схемы запроса (открываться в конструкторе запроса).
// В процессе разбора определяются выражения пустых значений. При этом, если в колонка составного типа,
// то тип определяется по первому:
//  Ссылочный - ЗНАЧЕНИЕ(Тип.ПустаяСсылка)
//  Число - ВЫРАЗИТЬ(0 КАК ЧИСЛО()) если указана разрядность иначе 0
//  Булево - ЛОЖЬ
//  Дата - ДАТАВРЕМЯ(1, 1, 1)
//  Все остальные случаи - НЕОПРЕДЕЛЕНО
// 
// 
// Параметры:
//  ТекстЗапроса - Строка - Текст запроса
//  Описание - См. НовоеОписаниеПредставления
//  ИмяВТ - Неопределено, Строка - Имя ВТ
//  КонтрольУникальности - Булево - Признак контроля добавления полей, которые были ранее добавлены.
//  								Если Истина, то такие поля будут проигнорированы
Процедура ПоляЗапросаВДоступныеПоляПредставления(ТекстЗапроса,
												 Описание,
												 ИмяВТ = Неопределено,
												 КонтрольУникальности = Ложь) Экспорт

	ИмяФункции = "ПоляЗапросаВДоступныеПоляПредставления";
	МодульОбщегоНазначенияКлиентСервер = МодульОбщегоНазначенияКлиентСервер();
	
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "ТекстЗапроса", ТекстЗапроса, Тип("Строка"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Описание", Описание, Тип("Структура"));
	Если ИмяВТ <> Неопределено Тогда
		МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "ИмяВТ", ИмяВТ, Тип("Строка"));
	КонецЕсли;
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции,
														 "КонтрольУникальности",
														 КонтрольУникальности,
														 Тип("Булево"));
	
	МодульОбщегоНазначения = МодульОбщегоНазначения();
	
	СхемаЗапроса = Новый СхемаЗапроса;
	СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
	ГраницаПакетаЗапросов = СхемаЗапроса.ПакетЗапросов.Количество() - 1;

	Для Индекс = 0 По ГраницаПакетаЗапросов Цикл
		ЗапросСхемыЗапроса = СхемаЗапроса.ПакетЗапросов[ГраницаПакетаЗапросов - Индекс];

		Если ТипЗнч(ЗапросСхемыЗапроса) <> Тип("ЗапросВыбораСхемыЗапроса") Тогда
			Продолжить;
		КонецЕсли;

		Если ИмяВТ <> Неопределено И ВРег(ЗапросСхемыЗапроса.ТаблицаДляПомещения) <> ВРег(ИмяВТ) Тогда
			Продолжить;
		КонецЕсли;

		Для Каждого КолонкаСхемыЗапроса Из ЗапросСхемыЗапроса.Колонки Цикл
			Если ТипЗнч(КолонкаСхемыЗапроса) <> Тип("КолонкаСхемыЗапроса") Тогда
				Продолжить;
			КонецЕсли;
			
			Если КонтрольУникальности И Описание.ДоступныеПоля.Найти(КолонкаСхемыЗапроса.Псевдоним,
																	 "Имя") <> Неопределено Тогда

				Продолжить;
			КонецЕсли;
			
			ПустоеЗначение = ВыражениеПустогоЗначенияПоКолонкеСхемыЗапроса(КолонкаСхемыЗапроса);
			ДобавитьПолеПредставления(Описание, КолонкаСхемыЗапроса.Псевдоним, ПустоеЗначение);
		КонецЦикла;

		Прервать; // Прерываем цикл после обработки первого подходящего запроса
	КонецЦикла;

КонецПроцедуры

// Описание представления
// 
// Возвращаемое значение:
//  Структура - Новый описание представления:
// 	 * Подсистема - Строка - Имя подсистемы.
// 	 * Имя - Строка - Имя представления.
// 	 * Фильтр - Строка - Имя фильтра.
// 	 * ЕстьИсточникДанных - Булево - Признак использования источника данных (регистра).
// 	 * ЕстьФильтр - Булево - Признак возможности указания таблицы фильтра.
// 	 * ФильтрОбязателен - Булево - Признак обязательного фильтра (если ЕстьФильтр = Истина).
// 	 * ДоступныОтборы - Булево - Признак доступности отборов в параметрах.
// 	 * Описание - Строка - Текстовое описание представления, подсказки.
// 	 * ДоступныеПараметры - ТаблицаЗначений - Коллекция доступных параметров:
// 	 	** Имя - Строка - Имя параметра
// 	 	** Тип - ОписаниеТипов - Доступные типы параметра.
// 	 	** Значение - Неопределено, Булево, Строка, Число - Значение, если параметр не используется.
// 	 	** Обязательный - Булево - Признак обязательности параметра.
// 	 	** Описание - Строка - Подробное описание параметра.
// 	 * ДоступныеПоля - ТаблицаЗначений - Коллекция доступных полей:
// 	 	** Имя - Строка - Имя поля.
// 	 	** Выражение - Строка - Выражение пустого значения на языке запросов.
// 	 	** ПолныйПуть - Строка - Полный путь к полю. Для построения иерархии. Не используется в данный момент.
// 
Функция НовоеОписаниеПредставления() Экспорт

	Описание = Новый Структура;
	Описание.Вставить("Подсистема", "");
	Описание.Вставить("Имя", "");
	Описание.Вставить("ЕстьИсточникДанных", Ложь);
	Описание.Вставить("ЕстьФильтр", Ложь);
	Описание.Вставить("Фильтр", "");
	Описание.Вставить("ФильтрОбязателен", Истина);
	Описание.Вставить("ДоступныОтборы", Ложь);
	Описание.Вставить("Описание", "");

	Описание.Вставить("ДоступныеПараметры", Новый ТаблицаЗначений);
	Описание.ДоступныеПараметры.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	Описание.ДоступныеПараметры.Колонки.Добавить("Тип", Новый ОписаниеТипов);
	Описание.ДоступныеПараметры.Колонки.Добавить("Значение", ОписаниеТипаВсеТипыПараметраПредставления());
	Описание.ДоступныеПараметры.Колонки.Добавить("Обязательный", Новый ОписаниеТипов("Булево"));
	Описание.ДоступныеПараметры.Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка"));
	Описание.ДоступныеПараметры.Колонки.Добавить("ДоступныеЗначения", Новый ОписаниеТипов("СписокЗначений"));
	Описание.ДоступныеПараметры.Колонки.Добавить("ЗначениеЭтоВыражение", Новый ОписаниеТипов("Булево"));
	
	Описание.Вставить("ДоступныеПоля", Новый ТаблицаЗначений);
	Описание.ДоступныеПоля.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
	Описание.ДоступныеПоля.Колонки.Добавить("Выражение", Новый ОписаниеТипов("Строка"));
	Описание.ДоступныеПоля.Колонки.Добавить("ПолныйПуть", Новый ОписаниеТипов("Строка"));
	Описание.ДоступныеПоля.Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка"));

	Возврат Описание;

КонецФункции

// Удаляет из текста запроса символы переноса строк и кавычки
// 
// Параметры:
//  ТекстЗапроса - Строка - Текст запроса
// 
// Возвращаемое значение:
//  Строка - Текст запроса
Функция ТекстЗапросаИзСтрокКода(Знач ТекстЗапроса) Экспорт
	
	ТекстЗапроса = СокрЛП(ТекстЗапроса);
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, """""", """");
	
	Если СтрНачинаетсяС(ТекстЗапроса, """") Тогда
		ТекстЗапроса = Сред(ТекстЗапроса, 2);
	КонецЕсли;
	
	Если СтрЗаканчиваетсяНа(ТекстЗапроса, """") Тогда
		ТекстЗапроса = Сред(ТекстЗапроса, 1, СтрДлина(ТекстЗапроса) - 1);
	КонецЕсли;
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "|", "");
	
	Возврат ТекстЗапроса;
	
КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Добавляет новый параметр к описанию представления
// 
// Параметры:
//  ОписаниеПредставления - Структура - Описание. См. НовоеОписаниеПредставления
//  Имя - Строка - Имя параметра
//  Тип - ОписаниеТипов, Тип - Тип параметра
//  Значение - Неопределено, Булево, Строка, Число, Дата - Значение
//  Обязательный - Булево - Обязательность параметра
//  ЗначениеЭтоВыражение - Булево - Признак, что строковое значение параметра представляет собой выражение языка запросов
//	ДоступныеЗначения - СписокЗначений Из ЭлементСпискаЗначений, Неопределено - Доступные значения параметра для выбора пользователем
//  Описание - Строка - Подробное текстовое описание параметра
// 
// Возвращаемое значение:
//  СтрокаТаблицыЗначений - Добавить параметр представления
//@skip-check method-too-many-params
Функция ДобавитьПараметрПредставления(ОписаниеПредставления,
									  Имя,
									  Тип,
									  Значение = Неопределено,
									  Обязательный = Ложь,
									  ЗначениеЭтоВыражение = Ложь,
									  ДоступныеЗначения = Неопределено,
									  Описание = "") Экспорт

	ИмяФункции = "ДобавитьПараметрПредставления";

	МодульОбщегоНазначенияКлиентСервер = МодульОбщегоНазначенияКлиентСервер();
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции,
														 "ОписаниеПредставления",
														 ОписаниеПредставления,
														 Тип("Структура"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Имя", Имя, Тип("Строка"));
	Если Значение <> Неопределено Тогда
		МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции,
															 "Значение",
															 Значение,
															 ОписаниеТипаВсеТипыПараметраПредставления());
	КонецЕсли;
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Обязательный", Обязательный, Тип("Булево"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции,
														 "ЗначениеЭтоВыражение",
														 ЗначениеЭтоВыражение,
														 Тип("Булево"));

	ДопустимыеТипыПараметраТип = Новый Массив;
	ДопустимыеТипыПараметраТип.Добавить(Тип("ОписаниеТипов"));
	ДопустимыеТипыПараметраТип.Добавить(Тип("Тип"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Тип", Тип, ДопустимыеТипыПараметраТип);
	
	Параметр = ОписаниеПредставления.ДоступныеПараметры.Добавить();
	Параметр.Имя = Имя;
	Параметр.Значение = Значение;
	Параметр.Обязательный = Обязательный;
	Параметр.Описание = Описание;
	Параметр.ЗначениеЭтоВыражение = ЗначениеЭтоВыражение;
	Параметр.ДоступныеЗначения = ДоступныеЗначения;

	Если ТипЗнч(Тип) = Тип("Тип") Тогда
		МассивТипов = Новый Массив;
		МассивТипов.Добавить(Тип);
		ОписаниеТипа = Новый ОписаниеТипов(МассивТипов);
		Параметр.Тип = ОписаниеТипа;
	Иначе
		Параметр.Тип = Тип;
	КонецЕсли;
	
	Возврат Параметр;

КонецФункции

// Добавляет новое поле в описание представления.
//
// Параметры:
//   ОписаниеПредставления - Структура - объект, содержащий описание представления
//   Имя - Строка - имя добавляемого поля
//   Выражение - Строка - выражение, связанное с добавляемым полем
//   ПолныйПуть - Строка - полный путь к полю (необязательно)
//   Описание - Строка - описание поля (необязательно)
//
// Возвращаемое значение:
//  СтрокаТаблицыЗначений - добавленное поле
Функция ДобавитьПолеПредставления(ОписаниеПредставления, Имя, Выражение, ПолныйПуть = "", Описание = "") Экспорт

	ИмяФункции = "ДобавитьПолеПредставления";
	
	МодульОбщегоНазначенияКлиентСервер = МодульОбщегоНазначенияКлиентСервер();
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции,
												   "ОписаниеПредставления",
												   ОписаниеПредставления,
												   Тип("Структура"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Имя", Имя, Тип("Строка"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Выражение", Выражение, Тип("Строка"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "ПолныйПуть", ПолныйПуть, Тип("Строка"));
	МодульОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Описание", Описание, Тип("Строка"));

	Поле = ОписаниеПредставления.ДоступныеПоля.Добавить();
	Поле.Имя = Имя;
	Поле.Выражение = Выражение;
	Поле.ПолныйПуть = ПолныйПуть;
	Поле.Описание = Описание;

	Возврат Поле;

КонецФункции

// Удаляет поле представления из доступных полей по указанному имени.
//
// Параметры:
//   Описание - См. НовоеОписаниеПредставления
//   Имя - Строка - имя поля представления, которое необходимо удалить
Процедура УдалитьПолеПредставления(Описание, Имя)

	ПолеПредставления = Описание.ДоступныеПоля.Найти(Имя, "Имя");
	Если ПолеПредставления <> Неопределено Тогда
		Описание.ДоступныеПоля.Удалить(ПолеПредставления);
	КонецЕсли;

КонецПроцедуры

// Добавляет параметр "ТолькоРазрешенные" в описание представления.
//
// Параметры:
//   Описание - Структура - Описание представления, в которое добавляется параметр
Процедура ДобавитьПараметрТолькоРазрешенные(Описание)
	ДобавитьПараметрПредставления(Описание, "ТолькоРазрешенные", ОписаниеТипаБулево(), Ложь);
КонецПроцедуры

// Возвращает выражение пустого значения на языке запросов для указанной колонки схемы запроса.
// если в колонка составного типа, то тип определяется по первому:
//  Ссылочный - ЗНАЧЕНИЕ(Тип.ПустаяСсылка)
//  Число - ВЫРАЗИТЬ(0 КАК ЧИСЛО()) если указана разрядность иначе 0
//  Булево - ЛОЖЬ
//  Дата - ДАТАВРЕМЯ(1, 1, 1)
//  Все остальные случаи - НЕОПРЕДЕЛЕНО
//
// Параметры:
//   КолонкаСхемыЗапроса - КолонкаСхемыЗапроса - колонка схемы запроса, для которой нужно получить пустое значение
//
// Возвращаемое значение:
//   Строка - выражение пустого значения для указанной колонки схемы запроса
Функция ВыражениеПустогоЗначенияПоКолонкеСхемыЗапроса(КолонкаСхемыЗапроса)
	
	ПустоеЗначение = "НЕОПРЕДЕЛЕНО";

	Если ТипЗнч(КолонкаСхемыЗапроса) <> Тип("КолонкаСхемыЗапроса")
		 Или КолонкаСхемыЗапроса.ТипЗначения.Типы().Количество() = 0 Тогда
		
		Возврат ПустоеЗначение;
	КонецЕсли;
	
	Тип = КолонкаСхемыЗапроса.ТипЗначения.Типы()[0]; // Тип

	Если МодульОбщегоНазначения().ЭтоСсылка(Тип) Тогда
		ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
		ПустоеЗначение = СтрШаблон("ЗНАЧЕНИЕ(%1.ПустаяСсылка)", ОбъектМетаданных.ПолноеИмя());
	ИначеЕсли Тип = Тип("Число") Тогда
		Разрядность = КолонкаСхемыЗапроса.ТипЗначения.КвалификаторыЧисла.Разрядность;
		РазрядностьДробнойЧасти = КолонкаСхемыЗапроса.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти;
		Если Разрядность > 0 Или РазрядностьДробнойЧасти > 0 Тогда

			ПустоеЗначение = СтрШаблон("ВЫРАЗИТЬ(0 КАК ЧИСЛО(%1, %2))",
									   Формат(Разрядность, "ЧН=; ЧГ=;"),
									   Формат(РазрядностьДробнойЧасти, "ЧН=; ЧГ=;"));
		Иначе
			ПустоеЗначение = "0";
		КонецЕсли;
	ИначеЕсли Тип = Тип("Строка") Тогда
		Если КолонкаСхемыЗапроса.ТипЗначения.КвалификаторыСтроки.Длина > 0 Тогда
			ПустоеЗначение = СтрШаблон("ВЫРАЗИТЬ("""" КАК СТРОКА(%1))",
									   Формат(КолонкаСхемыЗапроса.ТипЗначения.КвалификаторыСтроки.Длина, "ЧН=; ЧГ=;"));
		Иначе
			ПустоеЗначение = """""";
		КонецЕсли;
	ИначеЕсли Тип = Тип("Булево") Тогда
		ПустоеЗначение = "ЛОЖЬ";
	ИначеЕсли Тип = Тип("Дата") Тогда
		ПустоеЗначение = "ДАТАВРЕМЯ(1, 1, 1)";
	Иначе
		// Обработка не требуется
	КонецЕсли;

	Возврат ПустоеЗначение;
	
КонецФункции

// Возвращает описание типа, включающее булево и строку.
//
// Возвращаемое значение:
//   ОписаниеТипов - описание типа, которое может быть булево или строка
Функция ОписаниеТипаБулево()
	Типы = Новый Массив; // Массив Из Тип
	Типы.Добавить(Тип("Булево"));
	Типы.Добавить(Тип("Строка"));

	Возврат Новый ОписаниеТипов(Типы);
КонецФункции

// Возвращает описание типа "Строка".
//
// Возвращаемое значение:
//   ОписаниеТипов - описание типа "Строка"
Функция ОписаниеТипаСтрока()
	Возврат Новый ОписаниеТипов("Строка");
КонецФункции

// Возвращает описание типа данных для представления даты.
//
// Возвращаемое значение:
//   ОписаниеТипов - описание типа данных, включающее типы "Дата" и "Строка"
Функция ОписаниеТипаДата()
	Типы = Новый Массив; // Массив Из Тип
	Типы.Добавить(Тип("Дата"));
	Типы.Добавить(Тип("Строка"));

	Возврат Новый ОписаниеТипов(Типы);
КонецФункции

// Возвращает описание типа, включающее все возможные типы параметра представления.
//
// Возвращаемое значение:
//   ОписаниеТипов - описание типа, которое включает типы: Дата, Строка, Булево, Число
Функция ОписаниеТипаВсеТипыПараметраПредставления() Экспорт
	Типы = Новый Массив; // Массив Из Тип
	Типы.Добавить(Тип("Дата"));
	Типы.Добавить(Тип("Строка"));
	Типы.Добавить(Тип("Булево"));
	Типы.Добавить(Тип("Число"));

	Возврат Новый ОписаниеТипов(Типы);
КонецФункции

#Область ОписанияПредставленийКонфигурации

// Добавляет описания базовых представлений в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_Базовые(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПодсистемы") Тогда
		Возврат;
	КонецЕсли;

	Обязательный = Истина;
	ЭтоВыражение = Истина;

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "Периоды";
	ДобавитьПараметрПредставления(Описание,
								  "НачалоИнтервала",
								  ОписаниеТипаДата(),
								  "&НачалоПериода",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ОкончаниеИнтервала",
								  ОписаниеТипаДата(),
								  "&ОкончаниеПериода",
								  Обязательный,
								  ЭтоВыражение);
	ДоступныеЗначенияПериодичности = Новый СписокЗначений;
	ДоступныеЗначенияПериодичности.Добавить("ГОД", "Год");
	ДоступныеЗначенияПериодичности.Добавить("КВАРТАЛ", "Квартал");
	ДоступныеЗначенияПериодичности.Добавить("МЕСЯЦ", "Месяц");
	ДоступныеЗначенияПериодичности.Добавить("ДЕНЬ", "День");
	ДобавитьПараметрПредставления(Описание,
								  "Периодичность",
								  ОписаниеТипаСтрока(),
								  "МЕСЯЦ",
								  ,
								  ,
								  ДоступныеЗначенияПериодичности);
	ДобавитьПараметрПредставления(Описание, "ИспользоватьКонецПериода", ОписаниеТипаБулево(), Ложь);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя,
																		   "НачалоИнтервала,ОкончаниеИнтервала"),
										   Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СрезПоследних";
	Описание.ЕстьФильтр = Истина;
	Описание.ЕстьИсточникДанных = Истина;
	Описание.ДоступныОтборы = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "ПсевдонимыПолейСКД", ОписаниеТипаСтрока(), "");
	ДобавитьПараметрПредставления(Описание,
								  "ПараметрыПостроения_ФормироватьСПериодичностьДень",
								  ОписаниеТипаБулево(),
								  Истина);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// Для совместимости с УИ
	//@skip-check bsl-legacy-check-dynamic-feature-access
	Описание = МодульОбщегоНазначенияКлиентСервер().СкопироватьРекурсивно(Описание);
	Описание.Имя = "СрезПервых";
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// Для совместимости с УИ
	//@skip-check bsl-legacy-check-dynamic-feature-access
	Описание = МодульОбщегоНазначенияКлиентСервер().СкопироватьРекурсивно(Описание);
	Описание.Имя = "ТаблицаРегистра";
	ДобавитьПараметрПредставления(Описание,
								  "ПараметрыПостроения_ВключатьЗаписиНаНачалоПериода",
								  ОписаниеТипаБулево(),
								  Ложь);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

	Если ПолучитьФункциональнуюОпцию("РаботаВХозрасчетнойОрганизации") Тогда
		Описание = НовоеОписаниеПредставления();
		Описание.Имя = "СвойстваСтатейФинансирования";
		Описание.Подсистема = "ОтражениеЗарплатыВБухучете";
		ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
		ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	КонецЕсли;

КонецПроцедуры

// Добавляет описания представлений подсистемы АттестацииСотрудников в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_АттестацииСотрудников(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПриложения.АттестацииСотрудников") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "АттестацииСотрудников";
	Обязательный = Истина;
	ЭтоВыражение = Истина;
	
	// СотрудникиПодлежащиеАттестации
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СотрудникиПодлежащиеАттестации";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрПредставления(Описание,
								  "НачалоПериода",
								  ОписаниеТипаДата(),
								  "&НачалоПериода",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ОкончаниеПериода",
								  ОписаниеТипаДата(),
								  "&ОкончаниеПериода",
								  Обязательный,
								  ЭтоВыражение);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя,
																		   "НачалоПериода,ОкончаниеПериода"), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// РезультатыАттестацииСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "РезультатыАттестацииСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы КадровоеПланирование в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_КадровоеПланирование(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПриложения.КадровоеПланирование")
		 Или Не ПолучитьФункциональнуюОпцию("ИспользоватьКадровоеПланирование") Тогда

		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "КадровоеПланирование";

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ПоказателиКадровогоПлана";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "СценарийОбязателен", ОписаниеТипаБулево(), Ложь);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);

	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы КадровыйУчет в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_КадровыйУчет(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПодсистемы.КадровыйУчет") Тогда
		Возврат;
	КонецЕсли;

	МодульКадровыйУчет = МодульОбщегоНазначения().ОбщийМодуль("КадровыйУчет");

	ИмяПодсистемы = "КадровыйУчет";
	Обязательный = Истина;
	ЭтоВыражение = Истина;
	
	// КадровыеДанныеСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "КадровыеДанныеСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	Описание.ДоступныОтборы = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "ФормироватьСПериодичностьДень", ОписаниеТипаБулево(), Истина);
	
	// Не все доступные поля представлены в описании, некоторые требуется добавлять вручную.
	// Данный запрос не может быть сформирован без указания конкретных полей, поэтому получить доступные поля
	// из текста запроса не представляется возможным.
	ДобавитьПолеПредставления(Описание, "Период", "ДАТАВРЕМЯ(1, 1, 1)");
	ДобавитьПолеПредставления(Описание, "Сотрудник", "ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)");
	ДобавитьПолеПредставления(Описание, "ФизическоеЛицо", "ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)");
	ПоляПредставленийЗарплатаКадрыВДоступныеПоляПредставления(МодульКадровыйУчет.ПоляПредставленийКадровыхДанныхСотрудников(),
															  Описание,
															  Истина);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// КадровыеДанныеФизическихЛиц
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "КадровыеДанныеФизическихЛиц";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	Описание.ДоступныОтборы = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПолеПредставления(Описание, "Период", "ДАТАВРЕМЯ(1, 1, 1)");
	ДобавитьПолеПредставления(Описание, "ФизическоеЛицо", "ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)");
	ПоляПредставленийЗарплатаКадрыВДоступныеПоляПредставления(МодульКадровыйУчет.ПоляПредставленийКадровыхДанныхФизическихЛиц(),
															  Описание,
															  Истина);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// РабочиеМестаСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "РабочиеМестаСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "Организация", ОписаниеТипаСтрока(), "&Организация", , ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "Подразделение", ОписаниеТипаСтрока(), "&Подразделение", , ЭтоВыражение);
	ПараметрыПостроения = МодульКадровыйУчет.ПараметрыДляЗапросВТРабочиеМестаСотрудниковПоВременнойТаблице();
	ЗапросВТРабочиеМестаСотрудников = МодульКадровыйУчет.ЗапросВТРабочиеМестаСотрудниковПоВременнойТаблице(Истина,
																										   "ВТ",
																										   ПараметрыПостроения);
	ПоляЗапросаВДоступныеПоляПредставления(ЗапросВТРабочиеМестаСотрудников.Текст, Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// СотрудникиОрганизации
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СотрудникиОрганизации";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	Описание.ФильтрОбязателен = Ложь;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "Организация", ОписаниеТипаСтрока(), "&Организация", , ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "Подразделение", ОписаниеТипаСтрока(), "&Подразделение", , ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "ОтбиратьПоГоловнойОрганизации", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "НачалоПериода", ОписаниеТипаСтрока(), "&НачалоПериода", , ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ОкончаниеПериода",
								  ОписаниеТипаСтрока(),
								  "&ОкончаниеПериода",
								  ,
								  ЭтоВыражение);

	ДобавитьПолеПредставления(Описание, "Период", "ДАТАВРЕМЯ(1, 1, 1)");
	ДобавитьПолеПредставления(Описание, "Сотрудник", "ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)");
	ДобавитьПолеПредставления(Описание, "ФизическоеЛицо", "ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)");
	// Доступны все кадровые данные для данной таблицы 
	ПоляПредставленийЗарплатаКадрыВДоступныеПоляПредставления(МодульКадровыйУчет.ПоляПредставленийКадровыхДанныхСотрудников(),
															  Описание,
															  Истина);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// ПлановыеНачисленияСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ПлановыеНачисленияСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "ФормироватьСПериодичностьДень", ОписаниеТипаБулево(), Истина);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// ПлановыеУдержанияСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ПлановыеУдержанияСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// СтажиСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СтажиСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// ТекущаяКадроваяРасстановка
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ТекущаяКадроваяРасстановка";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "Дата", ОписаниеТипаСтрока(), "&Дата", Обязательный, ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "Организация", ОписаниеТипаСтрока(), "&Организация", , ЭтоВыражение);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя, "Дата"), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// ФункциональныеОпцииОрганизаций
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ФункциональныеОпцииОрганизаций";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПолеПредставления(Описание, "ИспользуютсяРаботыСДосрочнойПенсией", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользуетсяТрудСтудентовСтуденческихОтрядов", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользоватьРабочиеМестаОхраныТрудаКорпоративная", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользуетсяТрудЧленовЛетныхЭкипажей", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользуетсяТрудШахтеров", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользуетсяТрудФармацевтов", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользуетсяТрудЧленовЭкипажейМорскихСудов", "ЛОЖЬ");
	ДобавитьПолеПредставления(Описание, "ИспользуютсяРаботыСДосрочнойПенсией", "ЛОЖЬ");
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы КадровыйРезервГосслужащих в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_КадровыйРезервГосслужащих(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПриложения.КадровыйРезерв.КадровыйРезервГосслужащих") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "КадровыйРезервГосслужащих";

	Если ПолучитьФункциональнуюОпцию("ИспользоватьКадровыйРезерв") Тогда
		Описание = НовоеОписаниеПредставления();
		Описание.Имя = "КадровыйРезервГосслужащих";
		Описание.Подсистема = ИмяПодсистемы;
		Описание.ЕстьФильтр = Истина;
		Описание.ФильтрОбязателен = Истина;
		Описание.Фильтр = "ВТОтборы";
		ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
		ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	КонецЕсли;

КонецПроцедуры

// Добавляет описания представлений подсистемы Медицина в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_Медицина(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПриложения.Медицина") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "Медицина";

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СертификатыПоСпециальностиФизическихЛиц";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	Описание.ФильтрОбязателен = Истина;
	Описание.Фильтр = "ВТОсновныеСотрудники";
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СведенияОбАккредитацияхСпециалистов";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	Описание.ФильтрОбязателен = Истина;
	Описание.Фильтр = "ВТОсновныеСотрудники";
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы ОхранаТруда в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_ОхранаТруда(ОписанияПредставлений)

	МодульОбщегоНазначения = МодульОбщегоНазначения();

	Если Не МодульОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.РабочиеМестаОхраныТруда") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "ОхранаТруда";

	Обязательный = Истина;
	ЭтоВыражение = Истина;

	Если МодульОбщегоНазначения.ОбщийМодуль("РабочиеМестаОхраныТруда").РабочиеМестаОхраныТрудаИспользуются() Тогда

		Описание = НовоеОписаниеПредставления();
		Описание.Имя = "РабочиеМестаОхраныТруда";
		Описание.Подсистема = ИмяПодсистемы;
		ДобавитьПараметрТолькоРазрешенные(Описание);
		ДобавитьПараметрПредставления(Описание,
									  "ДатаАктуальности",
									  ОписаниеТипаСтрока(),
									  "&ДатаАктуальности",
									  Обязательный,
									  ЭтоВыражение);

		Если МодульОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ОхранаТруда") Тогда
			ДобавитьПараметрПредставления(Описание, "ЭтоИнструктажи", Новый ОписаниеТипов("Булево"), Ложь);
			ДобавитьПараметрПредставления(Описание, "ЭтоМедосмотры", Новый ОписаниеТипов("Булево"), Ложь);
			ДобавитьПараметрПредставления(Описание, "ЭтоНесчастныеСлучаи", Новый ОписаниеТипов("Булево"), Ложь);
			ДобавитьПараметрПредставления(Описание, "ЭтоСОУТ", Новый ОписаниеТипов("Булево"), Ложь);
			ДобавитьПараметрПредставления(Описание, "ЭтоСИЗ", Новый ОписаниеТипов("Булево"), Ложь);
		КонецЕсли;

		ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);

		ОписанияПредставлений.Вставить(Описание.Имя, Описание);

	КонецЕсли;

КонецПроцедуры

// Добавляет описания представлений подсистемы ОстаткиОтпусков в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_ОстаткиОтпусков(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыРасширеннаяПодсистемы.ОстаткиОтпусков") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "ОстаткиОтпусков";

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ФактическиеОтпускаСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы ОтражениеЗарплатыВБухучете в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_ОтражениеЗарплатыВБухучете(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПодсистемы.ОтражениеЗарплатыВБухгалтерскомУчетеРасширенная") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "ОтражениеЗарплатыВБухучете";

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "БухучетЗарплатыСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы ПодборПерсонала в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_ПодборПерсонала(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ПодборПерсонала")
		 Или Не ПолучитьФункциональнуюОпцию("ИспользоватьПодборПерсонала") Тогда

		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "ПодборПерсонала";

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СведенияОКандидатах";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ЛичныеДанныеКандидатов";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "СтажПринятыхКандидатов";
	Описание.Подсистема = ИмяПодсистемы;
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы УправлениеШтатнымРасписанием в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_УправлениеШтатнымРасписанием(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыРасширеннаяПодсистемы.УправлениеШтатнымРасписанием") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "УправлениеШтатнымРасписанием";

	Обязательный = Истина;
	ЭтоВыражение = Истина;

	МодульУправлениеШтатнымРасписанием = МодульОбщегоНазначения().ОбщийМодуль("УправлениеШтатнымРасписанием");
		
	// Управление штатным расписанием
	Описание = НовоеОписаниеПредставления();
	Описание.Подсистема = ИмяПодсистемы;
	Описание.Имя = "ШтатноеРасписание";
	Описание.ЕстьФильтр = Истина;
	Описание.ФильтрОбязателен = Ложь;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание,
								  "ДатаАктуальности",
								  ОписаниеТипаДата(),
								  "&ДатаАктуальности",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "ВключатьНачисления", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ВключаяЗакрытые", ОписаниеТипаБулево(), Ложь);

	ПараметрыПостроения = МодульУправлениеШтатнымРасписанием.ПараметрыПостроенияВТШтатноеРасписание();
	ПараметрыПостроения.ДополнитьОписаниемНачислений = Истина;
	ПараметрыПостроения.ПолноеОписаниеНачислений = Истина;
	ПараметрыПостроения.Льготы = Истина;
	ПараметрыПостроения.УправленческиеНачисления = Истина;

	ЗапросВТШтатноеРасписание = МодульУправлениеШтатнымРасписанием.ЗапросВТШтатноеРасписание(Истина,
																							 ПараметрыПостроения);

	ПоляЗапросаВДоступныеПоляПредставления(ЗапросВТШтатноеРасписание.Текст, Описание);
	// Запрос формируется на основании другого экспортного метода, поэтому некоторые поля различаются и не могут
	// быть выбраны в представлении. Исключим такие поля, чтобы не возникало ошибки.
	ИсключаемыеПоля = "Льготы,ПлановыеНачисления,УправленческиеНачисления,"
					  + "ИдентификаторСтрокиВидаРасчета,РазмерМин,РазмерМакс,Размер";
	Для Каждого ИмяПоля Из СтрРазделить(ИсключаемыеПоля, ",") Цикл
		УдалитьПолеПредставления(Описание, ИмяПоля);
	КонецЦикла;
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы УчетНачисленнойЗарплаты в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_УчетНачисленнойЗарплаты(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыРасширенная.УчетНачисленнойЗарплаты") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "УчетНачисленнойЗарплаты";

	МодульЗарплатаКадрыОбщиеНаборыДанных = МодульОбщегоНазначения().ОбщийМодуль("ЗарплатаКадрыОбщиеНаборыДанных");

	Обязательный = Истина;
	ЭтоВыражение = Истина;
	
	// Регистр, по которому выполняется запрос по отработанному времени, относится к подсистеме УчетНачисленнойЗарплаты,
	// а представление в общем модуле общих наборов.
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ОтработанноеВремя";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрПредставления(Описание,
								  "НачалоПериода",
								  ОписаниеТипаДата(),
								  "&НачалоПериода",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ОкончаниеПериода",
								  ОписаниеТипаДата(),
								  "&ОкончаниеПериода",
								  Обязательный,
								  ЭтоВыражение);
	ЗапросВТПредставленияОтработанноеВремя = МодульЗарплатаКадрыОбщиеНаборыДанных.ЗапросВТПредставленияОтработанноеВремя("ВТ",
																														 '00010101',
																														 '00010101');
	ПоляЗапросаВДоступныеПоляПредставления(ЗапросВТПредставленияОтработанноеВремя.Текст, Описание);

	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "НачисленныеДоходыНДФЛ";
	Описание.Подсистема = ИмяПодсистемы;
	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);

	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

// Добавляет описания представлений подсистемы УчетБюджетныхУчреждений в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_УчетБюджетныхУчреждений(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПриложения.УчетБюджетныхУчреждений") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "УчетБюджетныхУчреждений";

	Если ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении") Тогда
		Описание = НовоеОписаниеПредставления();
		Описание.Имя = "СвойстваСтатейФинансирования";
		Описание.Подсистема = ИмяПодсистемы;
		ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя), Описание);
		ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	КонецЕсли;

КонецПроцедуры

// Добавляет описания представлений подсистемы УчетРабочегоВремени в коллекцию описаний представлений.
//
// Параметры:
//   ОписанияПредставлений - Соответствие Из КлючИЗначение - Коллекция, в которую будут добавлены описания представлений.
Процедура ДобавитьОписанияПредставлений_УчетРабочегоВремени(ОписанияПредставлений)

	Если Не МодульОбщегоНазначения().ПодсистемаСуществует("ЗарплатаКадрыПодсистемы.УчетРабочегоВремени") Тогда
		Возврат;
	КонецЕсли;

	ИмяПодсистемы = "УчетРабочегоВремени";

	Обязательный = Истина;
	ЭтоВыражение = Истина;

	// ДанныеУчетаРабочегоВремениСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ДанныеУчетаРабочегоВремениСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "ДатаНачала", ОписаниеТипаДата(), "&ДатаНачала", Обязательный, ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ДатаОкончания",
								  ОписаниеТипаДата(),
								  "&ДатаОкончания",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "ПолучатьДанныеФакт", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ПолучатьДанныеПлан", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "ПолучатьДанныеНорма", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "Индексировать", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "ИспользоватьУжеРассчитанныеДанные", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ФормироватьПриНаличииРассчитанныхДанных", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ПолучатьУсловияТрудаИТерритории", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "УчитыватьТабельныеДанныеОТерриториях", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ПолучатьНормуВремениЗаПолныйМесяц", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "УчитыватьТолькоИндивидуальныеСведения", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "ОтноситьПереходящуюЧастьСменыКДнюНачала", ОписаниеТипаБулево(), Ложь);

	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя, "ДатаНачала,ДатаОкончания"),
										   Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// ДанныеУчетаВремениИСостоянийСотрудников
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ДанныеУчетаВремениИСостоянийСотрудников";
	Описание.Подсистема = ИмяПодсистемы;
	Описание.ЕстьФильтр = Истина;

	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "ДатаНачала", ОписаниеТипаДата(), "&ДатаНачала", Обязательный, ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ДатаОкончания",
								  ОписаниеТипаДата(),
								  "&ДатаОкончания",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "МесяцДатаНачала",
								  ОписаниеТипаДата(),
								  "НАЧАЛОПЕРИОДА(&ДатаНачала, МЕСЯЦ)",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "МесяцДатаОкончания",
								  ОписаниеТипаДата(),
								  "КОНЕЦПЕРИОДА(&ДатаНачала, МЕСЯЦ)",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ДатаАктуальности",
								  ОписаниеТипаДата(),
								  "&ДатаАктуальности",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "Организация", ОписаниеТипаСтрока(), "&Организация", , ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "Подразделение", ОписаниеТипаСтрока(), "&Подразделение", , ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание, "РассчитыватьПлановоеВремя", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "ПолучатьУжеРассчитанныеДанные", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ПолучатьУсловияТрудаИТерритории", ОписаниеТипаБулево(), Ложь);
	ДобавитьПараметрПредставления(Описание, "ВыделятьВыходныеВПериодыОтклонений", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "УчитыватьТабельныеДанныеОТерриториях", ОписаниеТипаБулево(), Истина);
	ДобавитьПараметрПредставления(Описание, "ОтноситьПереходящуюЧастьСменыКДнюНачала", ОписаниеТипаБулево(), Ложь);

	ТекстЗапроса = СформироватьЗапросПредставления(Описание.Имя, "ДатаНачала,ДатаОкончания,МесяцДатаНачала,"
																 + "МесяцДатаОкончания,ДатаАктуальности");
	ПоляЗапросаВДоступныеПоляПредставления(ТекстЗапроса, Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);
	
	// ПлановоеВремя
	Описание = НовоеОписаниеПредставления();
	Описание.Имя = "ПлановоеВремя";
	Описание.Подсистема = ИмяПодсистемы;
	ДобавитьПараметрТолькоРазрешенные(Описание);
	ДобавитьПараметрПредставления(Описание, "ДатаНачала", ОписаниеТипаДата(), "&ДатаНачала", Обязательный, ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ДатаОкончания",
								  ОписаниеТипаДата(),
								  "&ДатаОкончания",
								  Обязательный,
								  ЭтоВыражение);
	ДобавитьПараметрПредставления(Описание,
								  "ДатаАктуальности",
								  ОписаниеТипаДата(),
								  "&ДатаАктуальности",
								  Обязательный,
								  ЭтоВыражение);

	ПоляЗапросаВДоступныеПоляПредставления(СформироватьЗапросПредставления(Описание.Имя,
																		   "ДатаНачала,ДатаОкончания,ДатаАктуальности"),
										   Описание);
	ОписанияПредставлений.Вставить(Описание.Имя, Описание);

КонецПроцедуры

#КонецОбласти

#КонецОбласти

#КонецЕсли